package com.androidmvp.dreammvp;

import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.androidmvp.R;
import com.androidmvp.dreammvp.simple5.MainPresenter_5;
import com.androidmvp.dreammvp.simple5.MainView_5;
import com.androidmvp.dreammvp.simple5.base.BaseActivity_5;
import com.androidmvp.dreammvp.simple7.base.MvpActivity_7;
import com.androidmvp.local.table.WeatherInfo;
import com.androidmvp.local.table.WeatherinfoEntity;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivityTestMvp extends BaseActivity_5<MainView_5,MainPresenter_5> implements MainView_5 {

    @BindView(R.id.tv_displayWeather)
    TextView tv;
    @BindView(R.id.progressBar)
    ProgressBar progressBar;
    @BindView(R.id.display_weather)
    Button displayWeather;

    //public MainPresenter_7 myPresenter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        listener();

    }

    //2、MVP设计->第二步->优化代码-优化第1步
    //分析问题：团队开发（存在问题：多人开发、模块化、迭代）
    //解决方案：MVP设计（UI层和M层进行分离）
    //解决P层和V层直接关联->接口回调
//    private void listener(){
//        myPresenter = new MainPresenter_1(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }

    //3、MVP设计->优化代码-优化第2步
    //分析问题：UI层和M层解除绑定
    //解决方案：绑定UI和解除绑定UI->方法绑定(attachView、detachView)
//    private void listener(){
//        myPresenter = new MainPresenter_2(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //4、MVP设计->优化代码-优化第3步
    //分析问题：其实这个绑定方式，那么你是一个presneter还好，如果多个presenter？很多冗余代码？
    //解决方案：抽象为父类->封装
//    private void listener(){
//        myPresenter = new MainPresenter_3(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //5、MVP设计->优化代码-优化第4步
    //分析问题：父类是不是写死了(LoginView)，假设有很多模块，多个View层，那么父类就行不通
    //解决方案：泛型设计
    //测试
//    private void listener(){
//        myPresenter = new MainPresenter_4(this);
//        myPresenter.attachView(this);
//        displayWeather.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                myPresenter.getData();
//            }
//        });
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        myPresenter.detachView();
//    }

    //6、MVP设计->优化代码-优化第5步
    //分析问题：如果注意，你会发现activity里面需要不断重复的绑定和解除绑定（50个类，100类），代码冗余太多了
    //解决方案：泛型设计+抽象类(动态指定类型)
    private void listener(){
        displayWeather.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getPresenter().getData();
            }
        });
    }

    @Override
    public MainPresenter_5 creatPresenter() {
        return new MainPresenter_5();
    }

    @Override
    public MainView_5 creatView() {
        return this;
    }







    @Override
    public void showData(WeatherInfo mybean) {
        if(mybean==null){
            tv.setText("请求失败");
        }
        else{
            WeatherinfoEntity bean = mybean.getWeatherinfo();
            String city=bean.getCity();
            String wd=bean.getWD();
            String ws=bean.getWS();
            String time=bean.getTime();
            String data="城市:"+city+"\n风向:"+wd+"\n风级:"+ws+"\n发布时间:"+time;
            tv.setText(data);
        }
        hideProgressBar();
    }

    @Override
    public void showProgressBar() {
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    public void hideProgressBar() {
        progressBar.setVisibility(View.GONE);
    }
}
